<?php

App::uses('AppModel', 'Model');

class Transaccion extends AppModel {
    /**
     * 				MODEL DATA MEMBERS
     */

    /**
     * Nombre de la tabla en base de datos
     *
     * Tabla relacionada con el modelo en cuestión, este atributo será usado para la generación
     * de consultas a la base de datos
     *
     * @var string
     */
    public $useTable = "transacciones";

    /**
     * Clave primaria de la base de datos
     *
     * clave primaria que indentifica cada registro de la tabla en cuestión
     *
     * @var string
     */
    public $primaryKey = "id_transaccion";

    /**
     * Nombre del campo que se muestra cuando se hacen busquedas del modelo
     *
     * Nombre del campo que se muestra cuando se hacen busquedas del modelo
     *
     * @var string
     */
    public $displayField = "id_usuario";

    /**
     * Nivel de recusividad para la busqueda de entidades relacionadas
     *
     * Este campo sirve para indicar si una consulta debe incluir las entidades
     * relacionadas con el modelo en cuestión, -1 quiere decir, 0 q.. y 1 ..
     *
     * @var int
     */
    public $recursive = -1;

    /**
     * Nombre del modelo
     *
     * Nombre del modelo para un alias las consultas y busquedas, ingresos y
     * otras interacciones con la base de datos.
     *
     * @var string
     */
    public $name = "Transaccion";

    /**
     * Orden por defecto
     *
     * Orden por defecto para las consultas que se realicen a la base de datos,
     * se pueden incluir varios campos de la base de datos. Y si se especifica
     * otro orden este no se tiene en cuenta.
     *
     * @var array(string)
     */
    public $order = array("Transaccion.id_transaccion", "Transaccion.id_usuario");

    /**
     * Validaciones del modelo
     *
     * Validaciones de los diferentes campos que se usan en el modelo
     *
     * @var array(array(string))
     */
    public $validate = array(
        "id_transaccion" => array(
            "notEmpty" => array(
                "rule" => "notEmpty",
                "allowEmpty" => false,
                "required" => "update",
                "message" => "Id de la transaccion no puede estar vacio",
            ),
            "naturalNumber_NoZero" => array(
                "rule" => array("naturalNumber", false),
                "message" => "Id de la transaccion debe ser un número entero diferente de cero",
            ),
            "isUnique" => array(
                "rule" => array("isUnique"),
                "message" => "Id de la transaccion debe ser único",
            ),
        ),
        "id_usuario" => array(
            "notEmpty" => array(
                "rule" => "notEmpty",
                "allowEmpty" => false,
                "required" => true,
                "message" => "Id del usuario no puede estar vacio",
            ),
            "naturalNumber_NoZero" => array(
                "rule" => array("naturalNumber", false),
                "message" => "Id del usuario debe ser un número entero diferente de cero",
            ),
        ),
        "monto" => array(
            "notEmpty" => array(
                "rule" => "notEmpty",
                "allowEmpty" => false,
                "required" => true,
                "message" => "Monto no puede estar vacio",
            ),
        ),
        "tipo_transaccion" => array(
            "validacion1" => array(
                "rule" => "notempty",
                "allowEmpty" => false,
                "required" => true,
                "message" => "Transaccion no puede estar vacio",
            ),
            "validacion3" => array(
                "rule" => array("maxLength", 50),
                "message" => "Máximo 50 caracteres",
            ),
            "validacion2" => array(
                "rule" => array("inList", array("entrada", "salida")),
                "message" => "La transaccion solo puede ser entrada/salida",
            ),
        ),
        "fecha_creacion_transaccion" => array(
            "validacion1" => array(
                "rule" => "notempty",
                'required' => "create",
                "allowEmpty" => false,
                "message" => "La fecha de creación de la transaccion no puede estar vacia",
            ),
            "validacion2" => array(
                "rule" => array('datetime', 'ymd'),
                "message" => "La fecha de creación de la transaccion debe ser en formato yyyy/mm/dd",
            ),
        ),
    );

    /**
     * 				MODEL METHODS
     */

    /**
     * Funcion save
     *
     * Permite asignar el valor de las fechas de creacion y modificacion,
     * en caso de la fecha de creacion revisa si ya tiene un valor en $data
     * y eso evita que se le vuelva a asignar la fecha actual.
     * @var string
     */
    public function save($data = null, $validate = true, $fieldList = array()) {
        $this->set($data);
        if (!isset($data['Transaccion']['id_transaccion'])) {
            $this->set(array('fecha_creacion_transaccion' => date("Y/m/j H:i:s")));
        }
        return parent::save($this->data, $validate, $fieldList);
    }

}

?>